home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
BBS-Archive
/
Dev
/
GNU-SMALLTALK.lha
/
bison.el
< prev
next >
Wrap
Lisp/Scheme
|
1991-11-09
|
3KB
|
88 lines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Copyright (C) 1988, 1989, 1990 Free Software Foundation, Inc.
;;; Written by Steve Byrne.
;;;
;;; This file is part of GNU Smalltalk.
;;;
;;; GNU Smalltalk is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by the Free
;;; Software Foundation; either version 1, or (at your option) any later
;;; version.
;;;
;;; GNU Smalltalk is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
;;; for more details.
;;;
;;; You should have received a copy of the GNU General Public License along
;;; with GNU Smalltalk; see the file COPYING. If not, write to the Free
;;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(autoload 'my-compile "my-c-mode")
(defvar bison-mode-syntax-table nil
"Syntax table used while in text mode.")
(if bison-mode-syntax-table
()
(setq bison-mode-syntax-table (copy-syntax-table text-mode-syntax-table))
(modify-syntax-entry ?\" ". " bison-mode-syntax-table)
(modify-syntax-entry ?\\ ". " bison-mode-syntax-table)
(modify-syntax-entry ?' "w " bison-mode-syntax-table))
(defvar bison-mode-map nil "")
(if bison-mode-map
()
(setq bison-mode-map (make-sparse-keymap))
(define-key bison-mode-map "\t" 'tab-to-tab-stop)
(define-key bison-mode-map "\e." 'find-nonterminal)
(define-key bison-mode-map "\C-xg" 'goto-state)
(define-key bison-mode-map "\C-cm" 'my-compile)
)
(defun bison-mode ()
"Major mode for editing Bison code intended for humans to read.\\{bison-mode-map}
Turning on bison-mode calls the value of the variable bison-mode-hook,
if that value is non-nil."
(interactive)
(kill-all-local-variables)
(use-local-map bison-mode-map)
(setq mode-name "Bison")
(setq major-mode 'Bison-mode)
(setq local-abbrev-table text-mode-abbrev-table)
(set-syntax-table bison-mode-syntax-table)
(run-hooks 'bison-mode-hook))
(defun goto-state (n)
(interactive "NState: ")
(goto-char (point-min))
(re-search-forward (concat "^state " (int-to-string n) "\n\n"))
(forward-line -2)
(recenter 0)
)
(defun find-nonterminal ()
(interactive)
(let (word)
(setq word (select-current-word))
(goto-char (point-min))
(re-search-forward (concat "^[ \t]*" word "[ \t]*:"))
(recenter 0)
))
(defun select-current-word ()
"Returns a string that's the entire word that the point is in."
(let (start end)
(if (= (char-syntax (char-after (point))) ?w)
(forward-sexp))
(setq end (point))
(backward-sexp)
(setq start (point))
(buffer-substring start end))
)